iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
自我挑戰組

初學C#之路:30天基礎學習與實作紀錄系列 第 8

Day8-C#物件導向基礎學習Part2

  • 分享至 

  • xImage
  •  

類別屬性和存取子
類別的成員有欄位(field)和屬性(Attribute);欄位亦稱"執行個體欄位(Instance Feild)",屬性(Property)則是物件靜態特徵的呈現。

前述範例中,將欄位的存取範圍設為public,外界可直接存取,會使類別內的資料成員無法受到保護。所以採取的作法是以存取修飾詞限定欄位的存取(封裝的基本存取),再利用類別內的方法存取欄位值。

以欄位而言,它所宣告的位置需在類別內、方法外(方法內所宣告的變數稱為"區域變數"),可視為類別內的"全域變數"。

為了不讓外部存取欄位內容,更彈性的作法就是將欄位改成屬性的副本,經由公開的屬性來存取私有的欄位,這種作法為”支援存放(baking store)”。

配合”存取子(Accessor)”的get或set做讀取、寫入或計算之私用(Private)。讓類別在”資訊隱藏”機制下,又能以公開方式提供設定或取得屬性值,提升方法的安全性和彈性。

屬性的語法如下:

private 資料型別 欄位名稱;
public 資料型別 屬性名稱
{
	get{return 欄位名稱;}
	set{欄位名稱 = value;}
}

//存取子set指定新值給屬性時要使用關鍵字value,同樣要有程式區段
//存取子get用來回傳屬性值,屬性被讀取時會執行其程式區段
//屬性中只有存取子get,表示是一個唯讀屬性;若只有存取予set,表示是一個唯寫屬性;若兩者皆有,表示能讀能寫

要注意的是,屬性不能歸類為變數,它與欄位不同。

使用屬性時:

  1. 要以存取修飾詞指定欄位的存取範圍
  2. 設定屬性的資料型別和名稱
  3. 使用存取子get和set

那麼屬性的存取子get和set,又是如何指定新值,回傳屬性值?

執行 chris.title = Console.ReadLine(); 敘述時,會取得使用者輸入的名字,表示title屬性能經由外部給予新值。存取子set會以value這個隱含引述來接受並指派給欄位name;而存取子get則以return敘述回傳name的欄位值。

https://ithelp.ithome.com.tw/upload/images/20240925/20121669ijVN7A3W0z.pnghttps://ithelp.ithome.com.tw/upload/images/20240925/20121669YAuAd0rTaB.png

以上來源:從零開始學visual C# 2017程式設計、W3Schools、詢問chatGPT
內容有誤的話,請留言或發訊息給我


上一篇
Day7-C#物件導向基礎學習Part1
下一篇
Day9-方法和傳遞機制Part2
系列文
初學C#之路:30天基礎學習與實作紀錄10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言